#pragma once // 宏,防止多次被调用引入多余代码,造成冲突

// 顺序表,是线性表的一种
// 底层结构一般采用数组来实现
// 逻辑结构是线性的,物理结构也是线性的 所以是线性表的一种

// 引入头文件

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>


typedef int SLDatatype ; // 这里修改类型定义名称,方便后面修改数据类型,实现通用

// 由于c++有相关数据结构的封装,所以我们在这里学习封装的所有数据结构的名称均与c++数据结构的方法相同,保证之后的c++的顺利学习和使用方法

// 定义一个动态的数据链表

typedef struct Seqlist
{

    SLDatatype* arr ; // 这里使用类型指针变量,是因为我们需要在堆区动态申请内存来存放数据(动态顺序表)

    int capacity ; // 空间容量

    int size ; // 有效数据个数

} SL ;

// 以下是关于顺序表的增删改查的函数,所有的函数的命名均以 SL (seqlist) + 功能来规范(和cpp方法对接)

// 顺序表的初始化

void SLInit (SL* ps) ;

// 顺序表的删除

void SLDestory (SL* ps) ;

// 顺序表的尾部插入

void SLPushBack (SL* ps , SLDatatype x) ;

// 顺序表的头部插入

void SLPushFront (SL* ps , SLDatatype x) ;

// 顺序表的尾部删除

void SLPopBack (SL* ps) ;

// 顺序表的头部删除

void SLPopFront (SL* ps) ;

// 顺序表的指定位置之前的插入数据

void SLInsert (SL* ps , int pos , SLDatatype x) ;

// 顺序表的删除指定位置的数据

void SLErase (SL* ps , int pos) ;

// 顺序表的打印

void SLPrint (SL* ps) ;

// 顺序表的查找

int SLFind (SL* ps , SLDatatype x) ;